package com.xingkeduo.business.user.service;

import com.xingkeduo.dao.database.DatabaseAccessObject;
import com.xingkeduo.pojo.query.CraftsmanDutyQO;
import com.xingkeduo.pojo.table.CraftsmanDutyTO;
import com.xingkeduo.util.pojo.exception.DataException;
import com.xingkeduo.util.tool.CommonUtil;
import com.xingkeduo.util.tool.IdentityUtil;
import com.xingkeduo.util.tool.IdentityUtil.Worker;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

/**
 * 一线员工岗位类
 * 
 * @author 高杰
 * @time 2019年1月12日 下午4:55:34
 * @description
 */
@Component
public class CraftsmanDutyService {
	private static final String NAMESPACE = CommonUtil.formatNamespace(CraftsmanDutyTO.class);
	@Resource(name = "mysqlUserMasterDao")
	private DatabaseAccessObject<CraftsmanDutyTO, CraftsmanDutyQO> dao;

	/**
	 * 查询
	 * 
	 * @author 高杰
	 * @time 2019年1月12日 下午4:57:44
	 * @param id
	 * @return
	 * @throws Throwable
	 */
	public CraftsmanDutyTO selectByPrimary(long id) throws Throwable {
		return dao.select(NAMESPACE, id);
	}

	/**
	 * 查询
	 * 
	 * @author 高杰
	 * @time 2019年1月12日 下午4:57:44
	 * @param id
	 * @return
	 * @throws Throwable
	 */
	public CraftsmanDutyTO selectByFirstSequence() throws Throwable {
		return selectBySequence(1);
	}

	/**
	 * 统计数量
	 *
	 * @author 高杰
	 * @time 2019年1月12日 下午4:57:44
	 * @param id
	 * @return
	 * @throws Throwable
	 */
	public int count(CraftsmanDutyQO craftsmanDutyQuery) throws Throwable {
		return dao.selectCount(NAMESPACE, craftsmanDutyQuery);
	}

	/**
	 * 查询
	 * 
	 * @author 高杰
	 * @time 2019年1月12日 下午4:57:44
	 * @param id
	 * @return
	 * @throws Throwable
	 */
	public CraftsmanDutyTO selectByNextSequence(int sequence) throws Throwable {
		return selectBySequence(++sequence);
	}

	/**
	 * 查询
	 * 
	 * @author 高杰
	 * @time 2019年1月12日 下午4:57:44
	 * @param id
	 * @return
	 * @throws Throwable
	 */
	public CraftsmanDutyTO selectBySequence(int sequence) throws Throwable {
		CraftsmanDutyQO query = new CraftsmanDutyQO().setSequence(sequence);
		List<CraftsmanDutyTO> tables = dao.select(NAMESPACE, query);
		if (tables == null || tables.size() < 1)
			return null;
		return tables.get(0);
	}

	/**
	 * 查询
	 * 
	 * @author 高杰
	 * @time 2019年1月12日 下午4:57:49
	 * @param query
	 * @return
	 * @throws Throwable
	 */
	public List<CraftsmanDutyTO> selectByQuery(CraftsmanDutyQO query) throws Throwable {
		return dao.select(NAMESPACE, query);
	}

	/**
	 * 添加
	 * 
	 * @author 高杰
	 * @time 2019年1月12日 下午4:57:54
	 * @param craftsmanLevel
	 * @throws Throwable
	 */
	@Transactional
	public void insert(CraftsmanDutyTO dutyTO) throws Throwable {
		dutyTO.initId(IdentityUtil.nextId(Worker.USER));
		int count = count(new CraftsmanDutyQO());
		dutyTO.setSequence(count+1);
		if (dao.insert(NAMESPACE, dutyTO) < 1)
			throw new DataException(DataException.Type.FAIL, "一线员工职级信息");
	}

	/**
	 * 修改
	 * 
	 * @author 高杰
	 * @time 2019年1月12日 下午4:58:00
	 * @param craftsmanLevel
	 * @throws Throwable
	 */
	@Transactional
	public void update(CraftsmanDutyTO craftsmanLevel) throws Throwable {
		if (dao.update(NAMESPACE, craftsmanLevel) < 1)
			throw new DataException(DataException.Type.FAIL, "一线员工职级信息");
	}
}
